
//#include "stdafx.h"//vc++6.0加上这一行.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
  int e=1;
  int g=0;
  int l=0;
  int k=0;
  int z;
  int i;
  int  c[1000];
  char a[100000];
  int count=0,n,m;
  int j=0;
  int b=0;
  char s[100];

void fun1(){            //功能1
printf("字符数：%d\n",m);
printf("单词数：%d\n",count);                 
printf("句子数: %d\n",j);
}
void txt(){             //输出文本
 c[0]=0;
for(i=1;i<e;i++){
     g=g+c[i];
     l=l+c[i-1];
    for(k=l;k<g;k++){
     printf("%c",a[k]);
    }
     if(a[k]!='.'&&a[k]!='!'&&a[k]!='?'&&a[k]!=','&&a[k]!=')'&&a[k]!='('){
     printf(" ");
}  
} 
printf("\n");
}

int main(void)
{
FILE *fp;
if((fp=fopen("D:\\file.txt","r"))==NULL){            //txt文件的位置
printf("打开文件失败...\n");
exit(0);                                            //终止函数
system("pause");
}
printf("打开文件成功\n");
m=0;
while(fscanf(fp,"%s",s)!=EOF){                      //fscanf遇到空格会终止，从而可以判断单词的个数
if(b==0)
{
 count++;   
}               
n=strlen(s); 
c[e]=n;//用来存单词长度包括标点符号
e++;
// printf(" n=%d  ",n);                             //获取两个空格之间的s的长度，它是单词的长度也可能包括了符号                               
for(i=0;i<n;i++){
   if(s[i]=='.'||s[i]=='!'||s[i]=='?'){             //用这个来判断句子数
    j++;
   }    
}  
if(s[i]=='.'||s[i]=='!'||s[i]=='?'||s[i]==','||s[i]==')'||s[i]=='('){       
   b=1;
} 
   /*如果每一段最后一位是符号，按上方的逻辑它会加一次，后面读到的是空格，所以还会加一次，
   所以符号和空格会各加一次，所以如果上一次最后一个是符号，b相当于一个标记，表示我已经
   加过了你不要再加了*/  
for(i=0;i<n;i++){                                   //将s内的字符传递给a;
    a[m+i]=s[i];
}                       
m=m+n;                                              //计算除空格外的字符数  
}
fclose(fp);//关闭文件 
printf("请输入指令:\n");
printf("1 读取字符、句子、单词数\n");
printf("2 输出txt文本\n"); 
printf("0 退出\n"); 
while(scanf("%d",&z)!=EOF){
   if(z==1){
      fun1();
   }
     if(z==2){
      txt();
   }
    if(z==3){
      printf("服务结束\n");
     break;
   }
}
system("pause");
return 0;
}
